From 95d48ac2e81df1f382669e4795cc3a9de151a252 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 11 Feb 2021 09:14:34 -0500 Subject: [PATCH] placesview: Avoid use-after-free The places view has questionable code for handling 'destroy', which seems to trigger use-after-free in some cases. Clean this up a bit by acknowledging the cancellation fully, rather than relying on the destroyed flag. --- gtk/gtkplacesview.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c index aec0ddea60..4d26337155 100644 --- a/gtk/gtkplacesview.c +++ b/gtk/gtkplacesview.c @@ -986,9 +986,14 @@ network_enumeration_next_files_finished (GObject *source_object, if (error) { - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - g_warning ("Failed to fetch network locations: %s", error->message); + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + { + g_clear_error (&error); + g_object_unref (view); + return; + } + g_warning ("Failed to fetch network locations: %s", error->message); g_clear_error (&error); } else @@ -999,16 +1004,11 @@ network_enumeration_next_files_finished (GObject *source_object, g_list_free_full (detected_networks, g_object_unref); } - g_object_unref (view); + update_network_state (view); + monitor_network (view); + update_loading (view); - /* avoid to update widgets if we are already destroyed - (and got cancelled s a result of that) */ - if (!view->destroyed) - { - update_network_state (view); - monitor_network (view); - update_loading (view); - } + g_object_unref (view); } static void -- 2.30.2